const express = require('express')
const userTable = require('../../db/user/userTable')
const GlobalUtils = require('../../tools/GlobalUtils')

const loginApp = express()

// 登录接口
loginApp.post('/', async (req, res) => {
  // 1 查询用户是否存在
  let rs = await userTable.findOne({ userName: req.body.userName })
  let [status, message] = [200, '登陆成功！'];
  // 2 不存在返回失败信息
  if (!rs) {
    [status, message] = [404, '该用户不存在或者未能通过审核！']
    return res.send({ status, message })
  }
  // 3 如果存在 就验证密码是否正确
  if (rs.password !== GlobalUtils.enCryptData(req.body.password, rs.key, 'sha256')) {
    [status, message] = [401, '用户密码错误！']
    return res.send({ status, message })
  }

  // 4 最后确定是否被冻结
  if (rs.freezed) {
    [status, message] = [403, '该账号已被冻结！']
    return res.send({ status, message })
  }
  // 审核通过则把令牌返回去
  res.setHeader('Authorization', rs.token)
  // 返回登录状态信息
  res.send({ status, message })
})

// 重置密码账号检测
loginApp.get('/user', async (req, res) => {
  const { userName } = req.query
  const result = await userTable.findOne({ userName })
  if (result) {
    res.send({
      status: 200,
      message: 'Ok'
    })
  } else {
    res.send({
      status: 404,
      message: '该账号不存在'
    })
  }
})

// 重置密码服务
loginApp.post('/resetPwd', async (req, res) => {
  const { userName, password } = req.body
  const user = await userTable.findOne({ userName })
  const newPwd = GlobalUtils.enCryptData(password, user.key, 'sha256')
  const updateRes = await userTable.updateOne(
    { userName },
    { $set: { password: newPwd } }
  )
  if (updateRes.matchedCount > 0) {
    res.send({
      status: 200,
      message: '密码重置成功！'
    })
  } else {
    res.send({
      status: 500,
      message: '密码重置失败！'
    })
  }
})

module.exports = loginApp